草庐IT

C++ 转换运算符到 chrono::duration - 适用于 c++17 但不适用于 C++14 或更低版本

以下代码使用设置为C++17的gcc7.1.0进行编译,但不使用设置为C++14(或VisualStudio2017)进行编译。在Wandbox上很容易重现.要让它与C++11/14一起工作,必须做些什么?#include#includeintmain(){structConvert{operatorstd::chrono::milliseconds(){std::cout 最佳答案 让我们从为什么这在C++14中不起作用开始。std::chrono::duration有两个相关的c'tors(std::chrono::millis

c++ - C++17 标准是否保证 union 的地址与其成员的地址相同?

我目前正在编写一个池分配器。我的问题归结为以下代码:templateunionmyUnion{Tdata;myUnion*nextUnion;};voidsomeFunction(){myUnionmu;T*t=new(std::addressof(mu.data))T();//somecodemyUnion*mu2=reinterpret_cast*>(t);}mu的地址总是和mu2一样吗? 最佳答案 是的。9.2/19(N4659中为12.2/24):Ifastandard-layoutclassobjecthasanynon-

c++ - N3797 的§8.5 p17(初始值设定项的语义)中是否缺少案例?

对于聚合structS{inti,j;};声明Ss({1,2});和Ss({1});执行直接初始化到N3797§8.5p16:TheinitializationthatoccursintheformsTx(a);Tx{a};aswellasinnewexpressions(5.3.4),static_castexpressions(5.2.9),functionalnotationtypeconversions(5.2.3),andbaseandmemberinitializers(12.6.2)iscalleddirect-initialization.但§8.5p17似乎没有描述它

c++ - C++14/17 项目是否可以使用使用 C++11 标准编译的二进制库,或者源代码是否需要重新编译?

可以在c++14/17项目中使用使用C++11编译的二进制文件吗?c++17项目中的c++14二进制库怎么样?或者是否需要使用与项目相同的标准更新和重新编译源代码?是否有任何其他方法可以在新的标准项目中包含旧的标准C++库? 最佳答案 C++标准与二进制文件格式无关。这仅取决于编译器/链接器和操作系统。因此,如果编译器供应商更改了ABI(应用程序二进制接口(interface)),则不能简单地将各个部分链接在一起。你可以在这里读到,只与gcc相关:https://gcc.gnu.org/onlinedocs/libstdc++/ma

c++ - 为什么有 C++14/17 的网络库提案?

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭8年前。Improvethisquestion尽管TCP/UDP/IP是常用的协议(protocol),但我不明白为什么他们希望它成为ISOC++标准的一部分。这些与语言的核心无关。数据结构是普遍需要的工具,因此STL是有意义的,但这些协议(protocol)在IMO中过于具体。

c++ - g++ c++17 类模板参数推导在非常特殊的情况下不起作用

我有以下代码:templateclasslit{public:lit(Tl):val(l){}Tval;};templateclasscat{public:cat(litconst&a,litconst&b):a(a),b(b){}litconst&a;litconst&b;};templatecatoperator+(litconst&a,litconst&b){returncat(a,b);}intmain(){autor1=cat((lit('b')),lit('d'));//compilesautor2=(lit('b'))+lit('d');//doesn'tcompilea

C++11 "enumerated types"(17.5.2.1.2)

引自C++11标准(17.5.2.1.2枚举类型):1SeveraltypesdefinedinClause27areenumeratedtypes.Eachenumeratedtypemaybeimplementedasanenumerationorasasynonymforanenumeration(Suchasanintegertype,withconstantintegervalues(3.9.1)).2Theenumeratedtypeenumeratedcanbewritten:enumenumerated{V0,V1,V2,V3,.....};staticconstenu

具有模板类默认参数的 C++17 别名模板

似乎C++17添加了当所有参数都有默认值时在模板类上删除“”的能力(就像我们长期以来能够处理函数一样)例如:templatestructMyStruct{intarr[LENGTH];};intmain(){MyStructa;MyStructb;//oldwaytousedefaultsMyStructc;//newwaytousedefaultsreturn0;}但是,当使用别名模板时,该功能似乎不再有效,例如:templatestructMyStruct{intarr[LENGTH];};templateusingMyAlias=MyStruct;intmain(){MyAlia

c++ - 为什么 C++17 向命名空间和枚举器添加属性?

如问题所述,我知道C++17中将有命名空间和枚举器的属性。这将如何影响我们的代码?这些属性是什么?它们允许我们做什么?我找不到任何好的资源来理解这个新功能。 最佳答案 目前,如果您要贬低特定的枚举值,则需要依赖编译器扩展。例如,在clang中,您可以通过以下方式指定弃用的枚举值:enumOperationMode{OM_Invalid,OM_Normal,OM_Terrified__attribute__((deprecated)),OM_AbortOnError__attribute__((deprecated))=4};一旦枚举

c++ - 如何在 Xcode for Mac OSX 中启用 C++17?

如何在OSXHighSierra(10.13.5)上的Xcode(9.4.1)中启用C++17? 最佳答案 在OSXHighSierra(10.13.5)上的Xcode(9.4.1)中使用C++17的步骤:在Xcode中打开现有的或创建一个新的C++项目点击“显示项目导航器”按钮。它位于Xcode窗口的左上部分,就在最小化/最大化/关闭窗口按钮的下方。它位于最左侧的图标,看起来像一个文件夹。点击“BuildSettings”并向下滚动以查找并展开“AppleLLVM9.0-Language-C++”部分将C++语言方言组合框选择更改